#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

// 那个非整数不能移动 递归baozhan
//double myPow(double x, int n) {
//
//    double res=1;
//    int size= abs(n);
//
//    int realSize=size/2;
//
//    res=res*(res<<realSize)
//
//    int left=size-realSize;
//
//    for(int i=0;i<left;i++)
//    {
//        res=res*x;
//    }
//    if(n>0)
//    {
//
//        return res;
//
//    }else if(n==0){
//        return 1;
//
//    }else{
//        //求一个负数的次幂
//        return 1/res;
//
//    }
//
//
//
//}
// 每次乘以她原来的 倍数
double myPow(double x, int n) {
    if (n == 0)
        return 1;
    if (n == 1)
        return x;

    double res = x * x;
    for (int i = 2; i < abs(n); ++i) {

        if (i * i < n) {
            res = res * res;
            i = i * i;
        } else {

            res = res * x;
        }

    }

    return n > 0 ? res : 1 / res;

}

//我特别怀疑是这个 long 计算费时间
double myPow(double x, int n) {
    if (n == 0)
        return 1;
    if (n == 1)
        return x;
    int absn = abs(n);
    double res = x;
    bool flag = true;
    for (long i = 1; i < absn; ++i) {

        if (flag && i * 2 < absn) {
            res = res * res;
            i = i * 2 - 1;//这边要减一因为后面++了
        } else {
            flag = false;
            res = res * x;
        }

    }

    return n > 0 ? res : 1 / res;

}